#ifndef QLSINTERFACE_H
#define QLSINTERFACE_H

#include <QString>
#include <QJsonObject>
#include <QJsonValue>

#include <QWidget>

#include "dllQLsPluginsManager_global.h"

/* 插件信息 */
class DLLQLSPLUGINSMANAGER_EXPORT InterfaceInfo
{
public:
	QString m_name;					/* 插件名 */
	QString m_logoPath;				/* 插件图标 */
	QString m_information;			/* 插件信息 */
	int m_level;					/* 插件等级：0：默认、按需加载；1：必装插件、启动就加载 */
	QString m_version;				/* 版本号 */

	InterfaceInfo();

	InterfaceInfo(QString name, QString logoPath, QString information, int level, QString version);

	InterfaceInfo(const QJsonObject &obj);
};

/* 插件总线 */
class DLLQLSPLUGINSMANAGER_EXPORT QLsBus
{
public:
	/**
	 * 总线类型
	 * BUS_NOTHING：不做处理
	 * BUS_SIGNAL：信号
	 * BUS_SLOT：槽函数
	 * BUS_MSG：消息
	 */
	enum Type
	{
		BUS_NOTHING = 0,
		BUS_SIGNAL = 1001, BUS_SLOT, BUS_MSG
	};

	Type type;

	typedef union
	{
		QString m_name;		/* 插件名 */
		void *m_func;		/* 插件信号槽函数指针 */
	}src, dest;

	QString m_msg;
};

/* 定义接口 */
class DLLQLSPLUGINSMANAGER_EXPORT QLsInterface
{
public:
	virtual ~QLsInterface(){}

	/* 获取插件信息 */
	virtual InterfaceInfo *GetInterfaceInfo() = 0;
	/* 返回一个 Widget 设置到 QLsPluginsManagerAppfwk 中进行显示 */
	virtual QWidget *GetPluginWidget() = 0;
	/* 销毁插件 */
	virtual void Destroy() = 0;
	/* 绑定 切换主题 信号槽 */
	virtual void connetChangeTheme(void *sigClass) = 0;
	/* 绑定 最小尺寸变化 的信号槽 */
	virtual void connectChangeMinimumSize(void *slotClass) = 0;
};

/* 声明接口 */
#define QLsInterface_iid "com.Interface.QLsInterface"
Q_DECLARE_INTERFACE(QLsInterface, QLsInterface_iid)

#endif // QLSINTERFACE_H
